Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Programación de microprocesador 68000 (página 2)



Partes: 1, 2

 

III. ARQUITECTURA DEL
MICROPROCESADOR
68000

A. EXCEPCIONES

Es el concepto
más amplio de las interrupciones. Es la respuesta del
68000 a sucesos tales como: ejecución de determinadas
instrucciones erróneas, interrupciones, activación
de líneas especiales.

La CPU guarda el
contenido de algunos registros y acude
a una dirección predeterminada. La
instrucción RTE (Retorno de Excepción) Reanuda la
ejecución del programa.

B. TIPOS DE EXCEPCION:

INTERNOS:

  • Errores Detectados Internamente :
    • Errores de Direccionamiento.
    • Violación de Privilegio
    • Código de Operación
      inexistente.
  • Por Ejecución de
    Instrucciones:
    • TRAP (Siempre)
    • TRAPV
    • CHK
    • División por 0
  • Después de de cada instrucción si
    esta en Modo Trazar (Bit T a 1).

EXTERNOS:

  • Errores de Bus
    (Señal BERR).
  • Reset Señal RESET
  • Petición de
    Interrupción.

Como se puede apreciar en la figura notaremos las
unidades básicas funcionales del
microprocesador.

IV.
CARACTERÍSTICAS PRINCIPALES DEL MICROPROCESADOR
68000

Tamaño de los Buses

Datos (DB15-D0):
16 bits

Direcciones: 23 bits, ya que el bit menos
significativo no sale realmente por el bus de direcciones, sino
a través de las señales de control LDS
y UDS.

CONTROL DEL BUS ASÍNCRONO

– UDS LDS (BE1, BE0)

– AS (Dirección
válida
)

– R#W

– DTACK (Fin de ciclo de lectura/escritura)

Tamaños de datos utilizados

BYTE = 8 bits (B)

PALABRA (WORD) = 16
bits (W)

PALABRA LARGA (LONG WORD) = 32 bits (L).

Descripción Interna

Estructura de registros

  • Registros de Datos D0-D7

Los registros de datos se usan para almacenar aquellos
datos que se van a manipular en las siguientes instrucciones del
programa o subrutina en curso. Por otra parte, al tener una
longitud de 32 bits, permiten trabajar en formatos de 32, 16 u 8
bits, según indique la instrucción.

Cada registro se
considera como:

* Tamaño: 32 bits.

* Modos de acceso:

  • Octeto (.B): se accede sólo a los 8 bits
    menos significativos.
  • Palabra (.W): se accede sólo a los 16 bits
    menos significativos.
  • Palabra larga o doble (.L): se accede al registro
    completo.

* Uso: para almacenar datos temporales.

  • Byte: 8 bits

Un dato de este formato puede ser transferido en un solo
ciclo de bus.

  • Palabras: 16 bits

Los datos bajo este formato también pueden ser
transferidos en un solo ciclo de bus.

  • Palabras largas: 32 bits

Puesto que los registros internos del 68000 son de 32
bits, se consigue también manejar este tipo de datos, pero
al tener un bus de datos de 16 bits se necesitan 2 ciclos de bus
para una transferencia.

El microprocesador 68000 maneja datos de la siguiente
forma:

  • Registros de Direcciones.
    A0-A6

Los registros de direcciones se utilizan para
referenciar posiciones de memoria donde se
han de acceder datos o donde se han de escribir. Se ha de cuidar
sin embargo el tipo de dirección que se pretende acceder
según el formato (16, 32 bits) del operando. Cuando se
utilizan como operando destino, todo el registro es modificado,
independientemente del formato del la dirección,
realizando extensión de signo.

Sólo admiten el modo palabra o el de palabra
larga para lectura/escritura. No
obstante una escritura en modo palabra modificaría los 32
bits del registro (extensión de signo).

  • Registro de Pila (SP)

USP: Puntero de Pila del Usuario

SSP: Puntero de Pila del Supervisor

El registro de pila, o puntero de pila, sirve para tener
referenciada la posición de memoria en que se encuentra el
último dato introducido en la pila. Se accede
automáticamente a un registro o a otro según el
microprocesador se encuentre en un modo u otro. Se decrementan
cuando se meten datos y se incrementan cuando se
sacan.

  • Contador de Programa (PC)

Registro de 32 bits (sólo se usan los 24 LSBs).
El registro de contador de programa apunta constantemente a la
siguiente instrucción que va a ser ejecutada. En el caso
del 68000, solo 24 de sus 32 bits se usan (ver bus de
direcciones) y el la línea A0 indica por su parte si el
dato con el que se está trabajando es un byte par (A0=0,
activándose la línea /UDS), un byte impar (A0=1,
activándose la línea /LDS) o bien una palabra (en
cuyo caso se activan tanto /UDS como /LDS).

  • Registro de Estado

Consta de 2 bytes: byte de sistema y byte de
usuario (también llamado registro de códigos de
condición o CCR).

El registro de estado se
subdivide en realidad en 2 bytes, cada uno ejerciendo una
función
bien distinta. Por una parte, se encuentra en registro de
códigos de condición (o CCR), que almacena unos
biestables que permiten los saltos condicionales y otras
instrucciones y que se encuentran en los 5 primeros bits del
byte. Los otros 3 no se usan y siempre están siempre a
0.

Acarreo, C:

Este bit se pone a 1 cuando se produce un acarreo a
consecuencia de una instrucción.

– Desbordamiento, V:

Este bit denota al ponerse a 1 que la última
operación ha efectuado un desbordamiento en el
dato.

– Zero, Z:

Este bit indica que el último operando o
resultado ha sido 0. Para ello se coloca a 1.

– Negativo, N:

Indica el signo del último operando/resultado con
1 si ha sido negativo.

– Extensión, X:

Se comporta como un bit de acarreo. En la mayoría
de las instrucciones, un cambio en C
implica el mismo cambio en X pero existen instrucciones en las
que esto no ocurre.

Por otra parte se encuentra el byte del sistema, que
contiene información vital para el funcionamiento
del micro. Este byte solo puede ser modificado en modo
Supervisor.

Máscara de interrupciones I2, I1,
I0:

Con estos 3 bits se puede fijar el nivel de prioridad de
una interrupción. Almacena el nivel a partir del cual se
atiende a una interrupción. Estos 3 bits constituyen el
nivel de la máscara de interrupción. Esto quiere
decir que, para que una interrupción sea atendida, debe
ser de un nivel superior al indicado por estos 3 bits. Existe sin
embargo el nivel 7 (111) que se denomina no enmascarable puesto
que se atiende siempre. Existen pues 8 niveles de
interrupción, de 0 a 7. De otra forma se hace caso omiso
de la petición.

– Supervisor, S:

Este bit indica que el micro se encuentra en modo
Supervisor (1) o en modo Usuario (0).

– Traza, T:

Permite la ejecución paso a paso de un programa,
con vistas a la depuración de su código.
Para ello se ha de poner el bit a 1.

El MC68000 puede ejecutar sus instrucciones en
dos modos diferentes: el modo usuario y el modo
supervisor.

  • El Modo Usuario conforma un entorno de
    programación para la ejecución de
    los programas de
    aplicación. En este modo no se pueden ejecutar ciertas
    instrucciones y no se puede acceder a parte del registro de
    Estado.
  • El Modo Supervisor permite utilizar el
    juego de
    instrucciones completo y acceder a todo el registro de Estado,
    tanto en lectura como en escritura. Se establece así
    unos "privilegios" de utilidad en
    sistemas
    operativos y software de
    base de los sistemas.

V. ORGANIZACIÓN DE DATOS EN
MEMORIA

Habiendo establecido este espacio lineal de direcciones,
quedan reservadas las direcciones comprendidas entre la 0 y la
1024 para usos específicos esenciales del 68000, conocidas
como memoria del sistema y datos del sistema. Estas
direcciones contienen importantes tablas para el tratamiento de
las interrupciones, cargas de operativos, etc., y no deben ser
alteradas por el usuario. Algunas de estas direcciones pueden
estar el la ROM, de forma que no desaparezcan al desconectar la
alimentación, pero seguirán
utilizando espacio de direcciones como cualquier otra
posición de memoria. Habrá, con toda seguridad, otras
áreas de memoria asignadas permanentemente a otras
funciones no
accesibles al usuario de programas y datos.

Por disponerse de un bus de dato de 16 bits, la memoria
puede considerarse formada por unidades de ese tamaño. El
MC68000 lee 16 bits cada vez, coincidiendo con el formato de
codificación de instrucciones en palabras
de 16 bits. No obstante Se podrá acceder a la memoria para
leer un BYTE, una palabra WORD, ó una doble palabra LONG,
siempre y cuando se tengan en cuenta las siguientes
reglas:

  1. Las direcciones de los bytes pueden ser pares o
    impares. Sus incrementos son de 1 en 1.
  2. Las direcciones de las palabras son siempre pares.
    Sus incrementos son de 2 en 2.
  3. Las direcciones de las dobles palabras son pares. Sus
    incrementos son de 4 en 4.
  4. Cuando se accede a una palabra que está en la
    dirección N, siendo N un número par, el byte de
    la dirección N es el Byte más significativo y el
    de la dirección N+1 es el byte menos significativo. Lo
    que significa que cuando se mira una palabra de memoria, su
    byte más significativo está en la
    dirección más baja, y su byte menos significativo
    está en la dirección más alta.
  5. Al acceder a una doble palabra también se
    realiza de tal manera que la palabra alta será la de
    dirección más baja, mientras que la la palabra
    baja está en la dirección más
    alta.
  6. Si se intenta acceder a una palabra o a una doble
    palabra en una dirección impar, se provocará un
    error.

Recordando lo más característico de la
manera de acceder a memoria es:

  • No existencia de segmentación o restricciones en el
    tamaño del programa, siendo utilizable todo el espacio
    de direcciones de manera lineal.
  • Las instrucciones de los programas se almacenan como
    palabras.
  • Los datos pueden tratarse como bytes, Word ó
    long.
  • Las direcciones de palabra (WORD) y doble palabra
    (LONG) son pares.

VI. SINTAXIS DEL
ENSAMBLADOR
68000

La Sintaxis de un lenguaje
ensamblador es el conjunto de reglas que debe guardar el
programa fuente y que estará compuesto por una serie de
instrucciones, distinguiéndose cuatro campos: etiqueta,
mnemotécnico, operando y comentario. El programa fuente
deberá estar en un fichero ASCII que se
genera con la ayuda de un programa editor, y no un procesador de
textos, ya que estos generan códigos de control que los
ensambladores son incapaces de interpretar. Un sencillo editor es
el de MS-DOS. Las
instrucciones en código máquina se codifican por
campos, por lo que las instrucciones escritas en ensamblador se
codificaran también por campos.

Línea de Instrucción en
Ensamblador

ETIQUETA

NEMOTECNICO

OPERANDO

COMENTARIO

SUBR

MOVE.L

D0, – (SP)   
;

Guarda D0

Nemotecnico.Z [Fuente] , [Destino]

.Z=>Tamaño del argumento

.B (Byte)

.W (Word)

.L (Long Word)

Si no se especifica tamaño se entiende que es
.W

.Fuente=>Lugar (Mem. o Reg.) de donde procede uno de
los operandos

                             (No
se modifica)

.Destino=>Lugar donde se deposita el
resultado.

  1. Es un campo opcional que se utiliza para tener una
    referencia de las instrucciones. El programa ensamblador va
    traduciendo secuencialmente las instrucciones del programa
    fuente, guardando los códigos traducidos en posiciones
    consecutivas de memoria. Cuando encuentra una etiqueta en una
    línea de instrucción, el ensamblador guarda
    dicha etiqueta en una tabla especial en la memoria, junto con
    la dirección de memoria en la que se ha almacenado la
    instrucción que la acompaña, así si
    alguna instrucción tiene que referenciar a la
    instrucción etiquetada, bastará con que se
    escriban los caracteres de la etiqueta en el campo de
    operandos correspondiente. El programa ensamblador se
    encargará, cuando deba traducir esta
    instrucción, de buscar en la tabla la dirección
    en memoria de la instrucción correspondiente a la
    etiqueta.

    Nombre simbólico de la dirección en
    memoria de la instrucción que le sigue.

    Formas de inclusión en el
    programa:

    • En la misma línea que la
      instrucción, pegada al margen izquierdo.
    • En la línea anterior a la de la
      instrucción:
    • Pegada al margen izquierdo.
    • Con espacio a la izquierda y seguida de
      " :
      ".

    Ejemplo:

    Caracteres permitidos:

    • Solo los 15 primeros son
      significativos.
    • Todos los códigos ASCII > 33 excepto:
      +, -, *, /, &, !, |, ^, >, <, (, ).
    • El primer carácter no puede ser ni un
      número, ni $ (Hexadec.), ni %
      (binario).
    1. Se utiliza para escribir los códigos de
      instrucciones ejecutables y los códigos de
      pseudoinstrucciones o directivos de ensamblador.
      Las instrucciones ejecutables son los
      mnemotécnicos que constituyen las instrucciones
      del computador.

      Las pseudoinstrucciones sirven para dar al
      ensamblador indicaciones como la dirección de
      memoria a partir de la cual debe ir guardando los
      códigos traducidos, realizar la reserva de las
      posiciones de memoria donde deben guardarse los
      resultados, etc. Las pseudoinstrucciones reciben este
      nombre porque sus mnemotécnicos no se convierten
      en código máquina, sino que son ejecutados
      directamente por el programa traductor.

    2. Campo de Nemotécnico:

      Se utiliza para indicar los
      valores concretos de los operandos que intervienen en
      la operación definida por el campo
      mnemotécnico. Dependiendo de la instrucción
      indicada en el campo mnemotécnico, habrá
      que definir el modo de direccionamiento, que
      estará determinado generalmente, mediante una
      combinación del código de operación
      y la información del campo de
      operandos.

      1. Las cantidades colocadas en el campo de
        operandos pueden venir expresadas en diferentes
        bases de numeración, que son: binaria, 
        decimal y hexadecimal, y van determinados por un
        símbolo que se añade al valor numérico.

        DECIMAL

        por defecto

        BINARIO

        %

        HEXADECIMAL

        $

      2. Números y constantes
        alfabéticas.
      3. Símbolos.
    3. Campo de Operandos:

    El conjunto de caracteres alfanuméricos que
    se utiliza en el campo de los operandos para indicar una
    dirección recibe el nombre de símbolo. El
    programador podrá definir sus propios símbolos mediante dos procedimientos:

    1. De forma implícita, mediante el empleo
      de etiquetas.

    b) De forma explícita, mediante
    algunas pseudoinstrucciones.

    1. Expresiones.

    Una expresión es una combinación de
    números y/o símbolos unidos mediante operadores
    aritméticos o lógicos

    1. Campo de Comentarios:
    • Mediante el campo de comentarios se trata de
      hacer más comprensivo al programa, incluyendo el
      todos los puntos claves, definición de
      símbolos, reservas de memoria, propósito del
      programa, etc.
    • El ensamblador los ignora.
    • Se inicia con "*" ó ";".
    1. Definir un símbolo consiste en asignar un
      valor como un número o una dirección de
      memoria a un nombre utilizando el directivo
      EQU.

      Cuando el traductor lee este directivo, guarda
      la etiqueta y el valor indicado en el operando, en una
      zona de memoria denominada tabla de símbolos. Al
      encontrar un símbolo en el campo de operandos el
      traductor consultará esta tabla para ver el valor
      que le corresponde.

    2. DEFINICIÓN DE SÍMBOLOS (EQU)
      – "EQUAL"

      El programa ensamblador utiliza un registro que
      le indica en que posición de memoria debe guardar
      una instrucción y que dirección debe
      asignar a una determinada etiqueta. Este registro se
      llama contador de dirección de ensamblado. Para
      poner el contenido de este contador a un valor
      determinado se usa una pseudoinstrucción
      denominada ORG.

    3. EL CONTADOR DE DIRECCIÓN DE ENSAMBLADO
      (ORG) – "ORIGIN"

      La sentencia DC.S permite definir una
      posición de memoria conteniendo un valor
      determinado o una serie de valores que se colocarán en orden a
      partir de la posición señalada.

    4. DEFINICIÓN DE CONSTANTES (DC)

      La sentencia DS,S reserva espacio de memoria sin
      especificar su contenido , y su longitud viene dada por
      el valor del operando , viéndose afectado este por
      el tamaño de la palabra como un factor
      multiplicador siendo por 1, por 2 o por 4
      respectivamente.

      DS.B expresión (DB, BYTE)

      DS.W expresión (DW, WORD)

      DS.L expresión (DL, LONG)

    5. DEFINICIÓN DE DATOS (DS)

      La sintaxis de este directivo es muy simple ya
      que consta sólo de un campo de
      mnemotécnico, END. Este directivo
      únicamente se usa una vez en cada programa y
      será necesariamente la última
      instrucción.

    6. ÚLTIMA SENTENCIA DEL PROGRAMA
      (END)

      La programación modular consiste en
      dividir un programa complejo en módulos
      independientes de manera que cada uno de ellos realice
      una tarea concreta.

      Para permitir la traducción de dichos módulos
      se usa el directivo EXT que indica al ensamblador que los
      símbolos utilizados en el módulo objeto de
      la traducción están definidos en otro
      módulo diferente.

      En el módulo donde se definen los
      símbolos que pueden ser utilizados por otros
      módulos deberá indicarse con el directivo
      DEF.

    7. ENLACE ENTRE PROGRAMAS (EXT, DEF)

      Estas pseudoinstrucciones funcionan como en un
      lenguaje de alto nivel, es decir si se
      verifica la condición, el  ensamblador
      traduce las instrucciones entre el IF y el ELSE y sino,
      entre el ELSE y el ENDIF.

    8. ACCIONES CONDICIONALES (IF, ELSE,
      ENDIF)

      El programa ensamblador puede emitir una serie
      de informes, como mostrar un listado en lenguaje
      ensamblador y en código máquina, mostrar
      los errores sintácticos, etc. Los directivos que
      realizan estas funciones son los siguientes:

      • NAME: da la posibilidad de poner un
        identificador al programa, así cuando se liste
        aparecerá el nombre en la cabecera.
      • PAGE: indica al traductor que debe de saltar
        a una nueva página cuando esté
        imprimiendo el informe.
      • LIST: indica al traductor que imprima el
        programa fuente.
      • TABLE: indica al traductor que imprima la
        tabla de símbolos
      • LALL: indica al traductor que imprima el
        programa fuente, el código máquina y la
        tabla de símbolos.
      1. ALMACENAMIENTO EN POSICIÓN
        PAR

      Existe una pseudoinstrucción, EVEN, que
      soluciona el problema de los microprocesadores de 16 bits, ya que estos
      sólo pueden utilizar datos de 2 bytes o
      más, comenzando siempre desde una posición
      par.

      Operaciones (Orden De
      Precedencia)

      | OR lógico

      ^ OR exclusivo

      & And lógico

      + Suma

      Resta

      * Multiplicación

      / División

      > Desplazamiento lógico a la
      derecha

      < Desplazamiento lógico a la
      izquierda

      +, – Cambio de signo

      ! Negación

      ( ) Paréntesis (uso
      ilimitado)

      VII. INSTRUCCIONES DEL
      MOTOROLA

      A
      continuación se desarrollarán las
      instrucciones del Motorola 68000, agrupadas según
      la función básica que realizan, estudiando
      la operación que realizan, su sintaxis, sus campos
      y algunos ejemplos.

      1. El conjunto de estas instrucciones permite
        el movimiento de datos entre registros de
        la CPU, entre registros y memoria y entre posiciones
        de memoria. Estas son las siguientes:

        MOVE: realiza la transferencia
        de un dato desde fuente a destino. Modifica el CCR de
        forma que refleja el signo del dato movido y el hecho
        de que sea cero o no. Los flags C y V se ponen a cero
        y el flag X no se modifica. También el manejo
        de la pila se lleva a cabo mediante esta
        instrucción, utilizando direccionamiento
        indirecto con el registro A7 que actúa como
        puntero de pila. Para llevar un dato a la pila el
        direccionamiento es indirecto con predecremento,
        mientras que para extraerlo se emplea el indirecto
        con posincremento.

        MOVEA: (Move Adress) es una
        variante dedicada a la transferencia de direcciones.
        El tamaño del dato es de 16 ó 32 
        bits. No modifica el CCR.

        MOVEQ: (Move Quick) tiene por
        finalidad la carga rápida de un registro de
        datos.

        MOVEM: (Move Múltiple)
        carga una serie de posiciones consecutivas de memoria
        en varios registros a la vez. No afecta al CCR.
        Ejemplo: MOVEM.L $1000,D0-D2/A2-A4/D7 copia los
        contenidos de las posiciones $1000, $1002,
        $1004,…$100C en los registros D0, D1, D2, D7, A2,A3
        y A4 respectivamente.

        EXG y SWAP: la primera
        intercambia el contenido completo de dos registros de
        datos o de dirección, mientras que la segunda
        actúa sobre un único registro, siempre
        de datos, intercambiando sus palabras alta y baja. La
        realización de estas transferencias sin la
        existencia de estas instrucciones, requeriría
        la ejecución de tres instrucciones MOVE, y la
        utilización de otro registro o de la memoria
        como almacenamiento temporal.

        LEA y PEA: (Load Effective
        Adress y Push Effective Adress) determinan la
        dirección efectiva del operando fuente. La
        primera almacena la dirección efectiva
        calculada en el registro de direcciones que se
        especifique como operando destino y la segunda lo
        lleva a la pila. Ninguna de las dos afecta al
        CCR.

        LINK y UNLINK: facilitan las
        operaciones necesarias para el paso de
        parámetros a/de subrutinas a través de
        la pila, ofreciendo la ventaja de ser independiente
        de las áreas de memoria de datos de un
        programa, y de no necesitar el uso de etiquetas, ni
        de direcciones concretas para acceder a dichos
        parámetros, facilitando así la
        inclusión de las subrutinas en programas
        diferentes sin necesidad de hacer cambios en ellas.
        La instrucción LINK reserva una zona de
        memoria en la pila, desplazando el puntero de pila
        (SP) hacia direcciones menores en el valor que se
        indique.
        La instrucción UNLINK restablece la pila en la
        situación que se encontraba antes de la
        ejecución de LINK, cargando el puntero de pila
        con el contenido del registro de direcciones 
        que se indica y a continuación extrae la
        palabra larga apuntada por SP y la lleva al registro
        de direcciones, quedando así restaurado.
         

      2. Instrucciones de Transferencias de
        Datos

        El Motorola 68000 dispone de instrucciones
        para las 4 operaciones aritméticas, sobre
        operandos binarios, y suma y resta sobre datos
        codificados en BCD. Además de cambio de signo
        para ambos tipo de datos, instrucciones de
        comparación, extensión de signo y
        actualización de los códigos de
        condición (CCR) según el valor de un
        dato.

        ADD: realiza la suma de los
        operandos fuente y destino, quedando el resultado
        almacenado en destino. Modifica el CCR en
        función del resultado de la
        operación.

        ADDA: (Add Adress) realiza la
        operación de la suma, siendo el destino un
        registro de direcciones en vez de datos.

        ADDI: (Add Inmediate) realiza
        la operación suma mediante direccionamiento
        inmediato.

        ADDQ: (Add Quick) realiza la
        operación resta mediante direccionamiento
        inmediato siendo el destino menor o igual que
        8.

        ADDX: (Add Extended) incluye
        en el resultado la suma del flag X, lo que facilita
        las operaciones con valores que superan la capacidad
        de los registros (precisión
        múltiple).

        SUB: (Substract) realiza la
        diferencia entre fuente y destino, depositando el
        resultado en destino.

        SUBA: (Substract Adress)
        realiza la operación de la resta, siendo el
        destino un registro de direcciones en vez de
        datos.

        SUBI: (Substract Inmediate)
        realiza la operación resta mediante
        direccionamiento inmediato.

        SUBQ: (Substract Quick)
        realiza la operación resta mediante
        direccionamiento inmediato siendo el destino menor o
        igual que 8.

        SUBX: (Substract Extended)
        incluye en el resultado la resta del flag X, lo que
        facilita las operaciones con valores que superan la
        capacidad de los registros (precisión
        múltiple).

        MULS y MULU: (Multiply Signed
        and Multiply Unsigned) realizan la
        multiplicación sobre los datos de 16 bits,
        generando un resultado de 32 bits, siendo el destino
        un registro de datos. Los flags C y V siempre quedan
        a 0 y el flag X no se modifica, reflejando el
        resultado de la operación los flags Z y
        N.

        DIVS y DIVU: (Signed y
        Unsigned) realizan la división de un dato de
        32 bits (en destino) por otro de 16 bits (en fuente),
        generando dos resultados de 16 bits: el cociente y el
        resto, siendo obligatorio que el destino sea un
        registro de datos. El cociente se guarda en los 16
        bits menos significativos y el resto en los 16 bits
        más significativos del registro destino. Ambas
        instrucciones ponen el flag C a 0, y el flag X no se
        modifica. Puede producirse desbordamiento si el
        divisor es pequeño, reflejándose en el
        flag V. Los flags N y Z son modificados reflejando el
        resultado de la operación.

        CMP: (Compara) las
        instrucciones de comparación efectúan
        la substracción destino-fuente pero la
        diferencia no se lleva a ningún destino,
        limitándose a afectar a los flags N, Z, V y C,
        de forma que se puedan comprobar diversas relaciones
        entre los datos que se comparen con el fin de
        producir ramificaciones en el programa.

        CMPA: (Compare Adress) utiliza
        como destino un registro de direcciones.

        CMPI: (Compare Inmediate)
        utiliza direccionamiento inmediato para fuente. Para
        el operando destino puede utilizar todos los modos
        salvo direccionamiento directo a registro de
        direcciones, indirectos con predecremento o
        posincremento y los relativos a PC.

        CMPM: (Compare Memory) compara
        dos datos en memoria con direccionamiento indirecto
        con posincremento facilitando así la
        comparación de bloques de memoria.

        CLR: (Clear) carga un cero
        binario en el operando destino poniendo los flags N a
        0, Z a 1, V a 0 y C a 0.

        NEG: (Negate) esta
        instrucción devuelve el complemento a 2 del
        operando y esto supone el cambio aritmético de
        signo. Afecta a todos los flags del CCR.

        NEGX: (Negate Extended)
        facilita el cambio de signo de valores de
        precisión múltiple.
        EXT: (Extend) cuando se quiere ampliar
        la longitud de un dato con signo, por ejemplo de byte
        a palabra o de palabra a palabra larga, sin alterar
        su valor, el dato original debe mantenerse en el byte
        o palabra de menor peso, y el byte o palabra que se
        añade debe tener todos sus bits con el mismo
        valor que el bit de signo del dato original,
        recibiendo esta operación el nombre de
        extensión de signo.

      3. Instrucciones Aritméticas:

        El Motorola 68000 dispone de cuatro
        instrucciones que realizan funciones
        lógicas,  que actúan bit a bit
        sobre datos de 8, 16, ó 32 bits y cuatro para
        manejar bits individuales sobre datos de 8 ó
        32 bits.

        AND: es la Y lógica. Admite todos los modos
        de direccionamiento para el operando fuente menos
        direccionamiento directo  a registro de
        direcciones, mientras que el operando destino admite
        también todos menos los direccionamientos
        relativos a PC.

        ANDI: realiza la misma
        función que AND, pero su direccionamiento es
        inmediato en el operando fuente y todos menos el
        direccionamiento directo a registro de direcciones y
        relativos a PC.

        EOR: es el O exclusivo. Admite
        únicamente el direccionamiento directo a
        registro de datos para el operando fuente, mientras
        que el operando destino admite también todos
        menos los direccionamientos directo a registro de
        direcciones y los relativos a PC.

        EORI: realiza la misma
        función que EOR, pero su direccionamiento es
        inmediato en el operando fuente y todos menos el
        direccionamiento directo a registro de direcciones y
        relativos a PC.

        NOT: complementación
        lógica.

        OR: es la O lógica.
        Admite todos los modos de direccionamiento para el
        operando fuente menos direccionamiento directo 
        a registro de direcciones, mientras que el operando
        destino admite también todos menos los
        direccionamientos relativos a PC y directo a registro
        de direcciones.

        ORI: realiza la misma
        función que OR, pero su direccionamiento es
        inmediato en el operando fuente y todos menos el
        direccionamiento directo a registro de direcciones y
        relativos a PC.

        TST: (Test) comprueba un operando. Los flags
        V y C se ponen a 0.

        Scc: Comprueba los
        códigos de condición y pone a 1 el
        operando. Es de tamaño byte.

      4. Instrucciones Lógicas:

        Se caracterizan por desplazar o rotar el
        operando bit a bit a la derecha o a la izquierda. El
        operando destino, que es el afectado por el
        desplazamiento o por la rotación siempre
        será un registro de datos.

        ASL: (Arithmetic Shift Left)
        desplaza a la izquierda los bits del operando
        destino. El número de desplazamientos viene
        indicado por el operando origen. El flag V se pone a
        1 si el bit más significativo cambia en
        algún momento y C es el valor del
        último bit desplazado fuera del operando
        destino.

        ASR: (Arithmetic Shift Right)
        desplaza a la derecha los bits del operando destino.
        El número de desplazamientos viene indicado
        por el operando origen. El flag V se pone a 0, y el C
        es el valor del último bit desplazado fuera
        del operando destino.

        LSL: (Logical Shift Left) es
        el desplazamiento lógico a la izquierda. El
        número de desplazamientos viene indicado por
        el operando origen. El flag C es el valor del
        último bit desplazado fuera del operando
        destino.

        LSR: (Logical Shift Right) es
        el desplazamiento lógico a la derecha. El
        número de desplazamientos viene indicado por
        el operando origen. El flag C es el valor del
        último bit desplazado fuera del operando
        destino.

        ROL: (Rotate Left) rota a la
        izquierda los bits del operando destino. El
        número de desplazamientos viene indicado por
        el operando origen. El flag C es el valor del
        último bit desplazado fuera del operando
        destino.

        ROR: (Rotate Right) rota a la
        derecha los bits del operando destino. El
        número de desplazamientos viene indicado por
        el operando origen. El flag C es el valor del
        último bit desplazado fuera del operando
        destino.

        ROXL: (Rotate with Extended
        Left) rotación a la izquierda con
        extensión. El número de desplazamientos
        viene indicado por el operando origen. El flag C es
        el valor del último bit desplazado fuera del
        operando destino.

        ROXR: (Rotate with Extended
        Right) rotación a la derecha con
        extensión. El número de desplazamientos
        viene indicado por el operando origen. El flag C es
        el valor del último bit desplazado fuera del
        operando destino.

        SWAP: intercambia el contenido
        de los 16 bits más significativos con el de
        los 16 menos significativos, ya que los operandos son
        de tamaño palabra. Los flags V y C se ponen a
        0.

      5. Instrucciones de Desplazamiento y
        Rotación:

        El Motorola 68000 permite comprobar, poner a
        cero , poner a uno e invertir los bits individuales
        de un valor entero.

        BTST: (Bit Test) sirve para
        comprobar el estado de un bit concreto de destino. Actualiza el flag
        Z en función del valor del bit indicado en la
        instrucción (Z=1 si el bit es cero). Admite el
        direccionamiento inmediato y el directo a registro de
        datos en el operando fuente y en el operando destino
        todos menos el directo a registro de
        direcciones.

        BCLR: (Bit Clear) pone a 0 el
        bit indicado. Actualiza el flag Z en función
        del valor original del mismo, poniéndolo
        posteriormente a cero.

        BSET: (Bit Set) igual que
        BCLR, pero poniendo el bit a 1.

        BCHG: (Bit Change) en primer
        lugar actualiza el flag Z en función del valor
        del bit indicado y luego complementa el bit, es decir
        lo pone en el valor (0 ó 1) contrario al
        original.

      6. Instrucciones de Manipulación de
        Bits:

        De la misma manera que el Motorola 68000
        opera con enteros, también permite programar
        la suma y la resta en código BCD.

        ABCD: suma fuente al
        destino.

        NBCD: niega el
        destino.

        SBCD: resta fuente al
        destino

      7. Instrucciones de Operación en
        Código BCD:

        Este microprocesador incorpora varios
        mecanismos para poder realizar instrucciones
        típicas de los lenguajes de alto nivel, como
        pueden ser los bucles o las instrucciones de
        condición, siendo el más elemental la
        instrucción de ramificación, que
        utiliza como operando una etiqueta, y que sirve para
        hacer que la próxima instrucción que se
        ejecute sea la que tenga dicha etiqueta. Cuando el
        procesador se encuentra con esta instrucción,
        sencillamente carga la etiqueta en el contador de
        programa, por lo que la etiqueta es la
        dirección de donde debe cargarse la
        próxima instrucción que vaya a
        ejecutarse.

        Bcc: (Branch on condition
        code) utilizan un único argumento que indica
        la dirección de la siguiente
        instrucción en el caso de que se cumpla la
        condición indicada por cc. Utiliza siempre
        direccionamiento relativo al contador de programa. cc
        representa dos letras variables detalladas en la siguiente
        tabla:

        DBcc: (Decrement and Branch on
        Condition Code)  facilita la realización
        de bucles en un programa, y tiene dos argumentos
        siendo el primero un registro de datos y el segundo
        un desplazamiento de 16 bits respecto al PC. Su
        funcionamiento se puede detallar a
        continuación:

        1º Comprueba la condición cc, si
        se cumple, pasa a ejecutar la instrucción
        siguiente (secuencia normal del programa) y en caso
        de estar realizando un bucle se saldría del
        mismo.

        2º Decrementa el contenido del registro
        de datos.

        3º Si el contenido del registro es -1,
        se ejecuta la instrucción siguiente (salida
        del bucle)

        4º Modifica el PC con el desplazamiento
        indicado (salta al comienzo del bucle).

        BRA: (Branch) utiliza
        direccionamiento relativo al PC, su único
        argumento es el desplazamiento de 8 ó 16 bits
        que se suma (con signo) al PC y se obtiene la
        dirección de la siguiente instrucción a
        ejecutar. Con desplazamiento corto (8 bits) los
        saltos máximos que se pueden realizar son -128
        y +127. Con desplazamiento largo ( 16 bits) los
        saltos máximos son -32.768 y
        +32.767.

        JMP: (Jump) utiliza
        direccionamiento absoluto y su argumento es la
        dirección de comienzo de la siguiente
        instrucción a ejecutar y puede estar situada
        en cualquier parte del mapa de memoria.

        STOP: para la ejecución
        del programa de forma controlada y en el punto
        deseado.

        NOP: (No Operation) no realiza
        absolutamente nada. Es una instrucción que no
        hace sino consumir tiempo, exactamente 4 ciclos de reloj.
        Puede parecer absurda la existencia de una
        instrucción así, pero tiene su
        justificación, como por ejemplo si se desea
        efectuar un pequeño retraso en la
        ejecución de un programa con el fin de
        sincronizar determinados acontecimientos, o cuando se
        desea reservar algunas posiciones del programa para
        poder intercalar nuevas instrucciones,
        etc.

      8. Instrucciones de Ramificación y
        Salto:
      9. Instrucciones de Manejo de
        Subrutinas:

      BSR y JSR: (Branch to Subrutine y
      Jump to Subrutine) el operando asociado con estas
      instrucciones debe ser la dirección de memoria en
      la que se comienza la subrutina, con direccionamiento
      absoluto para JSR, y relativo a PC para BSR. Al
      ejecutarse cualquiera de las dos instrucciones, se
      almacena automáticamente en la pila el valor del
      contador de programa en el momento anterior al salto,
      cuando su contenido apunta a la dirección de
      comienzo de la instrucción siguiente a JSR o BSR.
      La subrutina debe tener como última
      instrucción a ejecutar RTS (Return
      from Subrutine) o RTR (Return and Restore).
      Ambas recuperan de la pila el valor del contador del
      programa, lo que permite reanudar la ejecución del
      programa precisamente en el punto que había sido
      abandonado. La instrucción RTR también
      repone el CCR extrayendo una palabra de la pila
      inmediatamente antes de recuperar el PC. La subrutina
      debe llevar a la pila, justamente encima de las
      posiciones que contienen la posición de retorno,
      una palabra cuyos 5 bits menos significativos
      serán llevados al CCR al ejecutarse RTR, que puede
      ser una copia del CCR al entrar en la subrutina, o
      cualquier otro valor.

      VIII. MODOS DE
      DIRECCIONAMIENTO

      Son las formas de indicar al
      procesador:

      • Donde puedo encontrar un dato.
      • Donde debo depositarlo.
      • A que ligar debe saltar para proseguir la
        ejecución.

      Existen cuatro modos de
      direccionamiento:

      1. Direccionamiento inmediato o
      literal:

      • Almacena el operando precedido del
        símbolo # en el registro indicado.
      • El operando (en vez de su dirección)
        esta incluido en la instrucción. (Usa 2 ó
        4 bytes).

      Ejemplo: MOVE.L #$18, D6

      2. Direccionamiento absoluto:

      Almacena el operando que está en la
      dirección de memoria especificada en el registro
      de datos indicado.

      Ejemplo: ADD.W %000000001000111110001, D2 suma
      la palabra que está en la dirección de
      memoria indicada, a D2.

      3. Direccionamiento mediante
      registro:

      Apunta a la dirección del registro donde
      está el dato.

      Ejemplo: MOVE.B D3, D4 copia el contenido del
      registro D3 (byte) a D4.

      4. Direccionamiento relativo a
      registro:

      1. Se da la dirección del registro donde
        está la dirección del dato. El nombre
        del registro se escribe entre
        paréntesis.

        Ejemplo: ADD.B (A0), D6 suma el contenido
        de la posición de memoria (byte) cuya
        dirección está en A0 al registro D6,
        guardando el resultado en este
        último.

      2. Direccionamiento mediante registro
        normal:

        Incrementa en una cantidad de memoria,
        según sea el tamaño del operando (1
        para B, 2 para W y 4 para L), después de traer
        el contenido de la posición de memoria
        indicada por el registro de direcciones.

        Ejemplo: MOVE.W (A0)+, D0 copia en D0 el
        contenido de la posición de memoria
        direccionada por A0 y luego incrementa en 2 el
        contenido de A0.

      3. Direccionamiento relativo a registro con
        posincremento:

        Decrementa en una cantidad de memoria,
        según sea el tamaño del operando, el
        registro de direcciones y trae después el
        contenido de la posición de memoria cuya
        dirección es el nuevo valor de dicho
        registro.

        Ejemplo: MOVE.B  -(A0), D0
        decrementa en uno el contenido del registro A0 y
        luego copia en D0 el contenido de la nueva
        posición de memoria direccionada por
        A0.

      4. Direccionamiento relativo a registro con
        predecremento:

        El contenido de la posición de
        memoria cuya dirección viene dada por la suma
        del valor del registro de direcciones y una cantidad
        fija denominada desplazamiento, pudiendo ser este
        positivo o negativo y su valor viene condicionado por
        el tamaño del operando.

        Ejemplo: MOVE.L N (A0), D1 copia en el
        registro D1 el contenido de la posición de
        memoria cuya dirección viene dada por la suma
        de N multiplicado por 4(L) al contenido de
        A0.

      5. Direccionamiento relativo a registro con
        desplazamiento:

        Este modo de direccionamiento es la
        extensión natural del anterior, ya que permite
        usar desplazamientos variables, utilizando como
        desplazamiento el resultado de sumar un número
        fijo al contenido de un registro de datos denominado
        registro índice.

        Ejemplo: MOVE.B 4(A0, D1), D0 copia en el
        registro D0 el contenido de la posición de
        memoria cuya dirección es el resultado de
        sumar el número 4, el contenido del registro
        A0 y el contenido del registro D1. Este modo de
        direccionamiento no altera el registro de direcciones
        ni el registro índice.

      6. Direccionamiento relativo a registro con
        índice:

        Cuando es necesario hacer referencia a un
        operando relativo a la posición de la
        próxima instrucción que va a ser
        ejecutada.

        Ejemplo: MOVE.B 24(PC), D0 copia en el
        registro D0 el contenido de la posición de
        memoria cuya dirección es la suma de 24 y el
        valor del contador del programa.

      7. Direccionamiento relativo al contador
        de programa con desplazamiento:
      8. Direccionamiento relativo al contador
        de programa con índice:

      Utiliza como desplazamiento el resultado de
      sumar un número fijo al contenido de un registro
      de datos.

      Ejemplo: MOVE.B 24(PC, D0), D1 copia en el
      registro D1 el contenido de la posición de memoria
      cuya dirección es el resultado de sumar el
      número 24, el contador de programa y el contenido
      del registro D0.

       

      Edson Palomino
      Santillan

      Universidad Nacional Mayor de San Marcos
      Ingenieria de Sistemas
      Lima – Perú

    9. EJECUCIÓN DE INFORMES
      (NAME, PAGE, LIST, TABLE, LALL)
  2. Campo de Etiqueta:

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter